From: Eric Huss Date: Fri, 20 Oct 2017 21:34:21 +0000 (-0700) Subject: Rework handling of --tests and --benches with implied targets. X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~22^2~5^2~22^2~2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=3dd21d80ba1795791302799284835410dddfc560;p=cargo.git Rework handling of --tests and --benches with implied targets. --- diff --git a/src/bin/check.rs b/src/bin/check.rs index c1b963c37..8a2ab42dd 100644 --- a/src/bin/check.rs +++ b/src/bin/check.rs @@ -111,8 +111,7 @@ pub fn execute(options: Options, config: &mut Config) -> CliResult { &options.flag_exclude, &options.flag_package)?; - let test = options.flag_tests || - match options.flag_profile.as_ref().map(|t| &t[..]) { + let test = match options.flag_profile.as_ref().map(|t| &t[..]) { Some("test") => true, None => false, Some(profile) => { @@ -132,8 +131,8 @@ pub fn execute(options: Options, config: &mut Config) -> CliResult { spec: spec, mode: ops::CompileMode::Check{test:test}, release: options.flag_release, - filter: ops::CompileFilter::new(options.flag_lib || options.flag_tests, - &options.flag_bin, options.flag_bins || options.flag_tests, + filter: ops::CompileFilter::new(options.flag_lib, + &options.flag_bin, options.flag_bins, &options.flag_test, options.flag_tests, &options.flag_example, options.flag_examples, &options.flag_bench, options.flag_benches, diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index b646afeb0..2aabb150b 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -652,10 +652,22 @@ fn generate_targets<'a>(pkg: &'a Package, pkg, bins, "bin", Target::is_bin, profile)?); targets.append(&mut propose_indicated_targets( pkg, examples, "example", Target::is_example, profile)?); + // If --benches was specified, add all targets that would be + // generated by `cargo bench`. + let bench_filter = match benches { + FilterRule::All => Target::benched, + FilterRule::Just(_) => Target::is_bench + }; targets.append(&mut propose_indicated_targets( - pkg, tests, "test", Target::is_test, test_profile)?); + pkg, benches, "bench", bench_filter, bench_profile)?); + // If --tests was specified, add all targets that would be + // generated by `cargo test`. + let test_filter = match tests { + FilterRule::All => Target::tested, + FilterRule::Just(_) => Target::is_test + }; targets.append(&mut propose_indicated_targets( - pkg, benches, "bench", Target::is_bench, bench_profile)?); + pkg, tests, "test", test_filter, test_profile)?); targets } }; diff --git a/src/cargo/ops/cargo_rustc/context.rs b/src/cargo/ops/cargo_rustc/context.rs index 334af3eaa..9e3696787 100644 --- a/src/cargo/ops/cargo_rustc/context.rs +++ b/src/cargo/ops/cargo_rustc/context.rs @@ -862,7 +862,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> { ret.extend(self.maybe_lib(unit)); // Integration tests/benchmarks require binaries to be built - if unit.profile.test && !unit.profile.check && + if unit.profile.test && (unit.target.is_test() || unit.target.is_bench()) { ret.extend(unit.pkg.targets().iter().filter(|t| { let no_required_features = Vec::new(); @@ -876,7 +876,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> { Unit { pkg: unit.pkg, target: t, - profile: self.lib_profile(), + profile: self.lib_or_check_profile(unit, t), kind: unit.kind.for_target(t), } })); diff --git a/tests/check.rs b/tests/check.rs index f58348487..073ee3186 100644 --- a/tests/check.rs +++ b/tests/check.rs @@ -488,9 +488,9 @@ fn check_unit_test_profile() { .with_stderr_contains("[..]badtext[..]")); } +// Verify what is checked with various command-line filters. #[test] -fn check_unit_test_all_tests() { - // Lib unit. +fn check_filters() { let p = project("foo") .file("Cargo.toml", SIMPLE_MANIFEST) .file("src/lib.rs", r#" @@ -533,36 +533,54 @@ fn check_unit_test_all_tests() { .build(); assert_that(p.cargo("check"), - execs().with_status(0) - .with_stderr_contains("[..]unused_normal_lib[..]") - .with_stderr_contains("[..]unused_normal_bin[..]") - .with_stderr_does_not_contain("unused_noraml_t1") - .with_stderr_does_not_contain("unused_noraml_ex1") - .with_stderr_does_not_contain("unused_noraml_b1") - .with_stderr_does_not_contain("unused_unit_")); + execs().with_status(0) + .with_stderr_contains("[..]unused_normal_lib[..]") + .with_stderr_contains("[..]unused_normal_bin[..]") + .with_stderr_does_not_contain("unused_normal_t1") + .with_stderr_does_not_contain("unused_normal_ex1") + .with_stderr_does_not_contain("unused_normal_b1") + .with_stderr_does_not_contain("unused_unit_")); p.root().join("target").rm_rf(); assert_that(p.cargo("check").arg("--tests").arg("-v"), - execs().with_status(0) - .with_stderr_contains("[..]unused_unit_lib[..]") - .with_stderr_contains("[..]unused_unit_bin[..]") - .with_stderr_contains("[..]unused_unit_t1[..]") - .with_stderr_does_not_contain("unused_normal_ex1") - .with_stderr_does_not_contain("unused_normal_b1") - .with_stderr_does_not_contain("unused_unit_ex1") - .with_stderr_does_not_contain("unused_unit_b1")); + execs().with_status(0) + .with_stderr_contains("[..] --crate-name foo src[/]lib.rs [..] --test [..]") + .with_stderr_contains("[..] --crate-name foo src[/]lib.rs --crate-type lib [..]") + .with_stderr_contains("[..] --crate-name foo src[/]main.rs [..] --test [..]") + .with_stderr_contains("[..] --crate-name foo src[/]main.rs --crate-type bin [..]") + .with_stderr_contains("[..]unused_unit_lib[..]") + .with_stderr_contains("[..]unused_unit_bin[..]") + .with_stderr_contains("[..]unused_normal_lib[..]") + .with_stderr_contains("[..]unused_normal_bin[..]") + .with_stderr_contains("[..]unused_unit_t1[..]") + .with_stderr_contains("[..]unused_normal_ex1[..]") + .with_stderr_contains("[..]unused_unit_ex1[..]") + .with_stderr_does_not_contain("unused_normal_b1") + .with_stderr_does_not_contain("unused_unit_b1")); + p.root().join("target").rm_rf(); + assert_that(p.cargo("check").arg("--test").arg("t1").arg("-v"), + execs().with_status(0) + .with_stderr_contains("[..]unused_normal_lib[..]") + .with_stderr_contains("[..]unused_normal_bin[..]") + .with_stderr_contains("[..]unused_unit_t1[..]") + .with_stderr_does_not_contain("unused_unit_lib") + .with_stderr_does_not_contain("unused_unit_bin") + .with_stderr_does_not_contain("unused_normal_ex1") + .with_stderr_does_not_contain("unused_normal_b1") + .with_stderr_does_not_contain("unused_unit_ex1") + .with_stderr_does_not_contain("unused_unit_b1")); p.root().join("target").rm_rf(); assert_that(p.cargo("check").arg("--all-targets").arg("-v"), - execs().with_status(0) - .with_stderr_contains("[..]unused_normal_lib[..]") - .with_stderr_contains("[..]unused_normal_bin[..]") - .with_stderr_contains("[..]unused_normal_t1[..]") - .with_stderr_contains("[..]unused_normal_ex1[..]") - .with_stderr_contains("[..]unused_normal_b1[..]") - .with_stderr_contains("[..]unused_unit_b1[..]") - .with_stderr_contains("[..]unused_unit_t1[..]") - .with_stderr_does_not_contain("unused_unit_lib") - .with_stderr_does_not_contain("unused_unit_bin") - .with_stderr_does_not_contain("unused_unit_ex1")); + execs().with_status(0) + .with_stderr_contains("[..]unused_normal_lib[..]") + .with_stderr_contains("[..]unused_normal_bin[..]") + .with_stderr_contains("[..]unused_normal_t1[..]") + .with_stderr_contains("[..]unused_normal_ex1[..]") + .with_stderr_contains("[..]unused_normal_b1[..]") + .with_stderr_contains("[..]unused_unit_b1[..]") + .with_stderr_contains("[..]unused_unit_t1[..]") + .with_stderr_contains("[..]unused_unit_lib[..]") + .with_stderr_contains("[..]unused_unit_bin[..]") + .with_stderr_contains("[..]unused_unit_ex1[..]")); } #[test] diff --git a/tests/test.rs b/tests/test.rs index d657e0342..2a454f043 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -1203,7 +1203,9 @@ fn test_run_implicit_test_target() { .with_stderr(format!("\ [COMPILING] foo v0.0.1 ({dir}) [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] -[RUNNING] target[/]debug[/]deps[/]mytest-[..][EXE]", dir = prj.url())) +[RUNNING] target[/]debug[/]deps[/]mybin-[..][EXE] +[RUNNING] target[/]debug[/]deps[/]mytest-[..][EXE] +[RUNNING] target[/]debug[/]examples[/]myexm-[..][EXE]", dir = prj.url())) .with_stdout_contains("test test_in_test ... ok")); } @@ -1233,6 +1235,7 @@ fn test_run_implicit_bench_target() { .with_stderr(format!("\ [COMPILING] foo v0.0.1 ({dir}) [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] +[RUNNING] target[/]debug[/]deps[/]mybin-[..][EXE] [RUNNING] target[/]debug[/]deps[/]mybench-[..][EXE]", dir = prj.url())) .with_stdout_contains("test test_in_bench ... ok")); }